/* 程序8-12 system函数(没有对信号进行处理) */
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>

int my_system(const char *cmdstring)		/* version without signal handling */
{
	pid_t pid;
	int status;

	if (cmdstring == NULL)
		return(1);		/* always a command processor whith Unix */

	if ((pid = fork()) < 0) {
		status = -1;		/* probably out of processes */
	} else if (pid == 0) {		/* child */
		execl("/bin/sh", "sh", "-c", cmdstring, (char *) 0);
		_exit(127);		/* execl error */
	} else {		/* parent */
		while (waitpid(pid, &status, 0) < 0)
			if (errno != EINTR) {
				status = -1;	/* error other than EINTR from waitpid() */
				break;
			}
	}

	return(status);
}
